/*
 * Copyright (C) 拾光分享网 
 * All rights reserved, Designed By www.hiai.top.
 * Email：goodsking@163.com.
 */
package top.hiai._admin.auth;

import com.jfinal.aop.Interceptor;
import com.jfinal.aop.Invocation;
import com.jfinal.kit.Ret;
import top.hiai.common.model.User;
import top.hiai.login.LoginService;

/**
* @Author www.hiai.top
* @Email  goodsking@163.com
* @Message 更多资源尽在www.hiai.top
* @Introduction 类的介绍   后台管理员授权拦截器
*/
public class AdminAuthInterceptor  implements Interceptor{

	AdminAuthService srv = AdminAuthService.me;
	
	private static final ThreadLocal<User> threadLocal = new ThreadLocal<User>();
	
	/**
	 * 当前登录用户
	 * @return
	 */
	public static User getThreadLocalAccount() {
		return threadLocal.get();
	}

	@Override
	public void intercept(Invocation inv) {
		User loginAccount = inv.getController().getAttr(LoginService.loginAccountCacheName);
		if (loginAccount != null && loginAccount.isStatusOk()) {
			// 传递给 sharedObject、sharedMethod 扩展使用
			threadLocal.set(loginAccount);
			
			// 如果是超级管理员或者拥有对当前 action 的访问权限则放行
			if (srv.isSuperAdmin(loginAccount.getUid()) ||
					srv.hasPermission(loginAccount.getUid(), inv.getActionKey())) {
				inv.invoke();
				return ;
			}
		}
		// renderError(404) 避免暴露后台管理 url，增加安全性
		if (loginAccount == null || inv.getActionKey().equals("/admin")) {
			//System.out.println("没有权限");
			inv.getController().renderError(404);
		}
		// renderJson 提示没有操作权限，提升用户体验
		else {
			inv.getController().renderJson(Ret.fail().set("msg", "没有操作权限"));
		}
		
	}
	
}